/**
 * @class Page 页面模型
 */
const BaseMod = require('./base');
const { parseUrl } = require('../../shared');
const { DateTime } = require('../lib');
module.exports = class Page extends BaseMod {
    constructor() {
        super();
        this.tableName = 'pages';
    }

    /**
     * 获取页面信息
     * @param {String} appid
     * @param {String} url 页面地址
     */
    async getPage(appid, url) {
        const cacheKey = 'uni-stat-page-' + appid + '-' + url;
        let pageData = await this.getCache(cacheKey);
        if (!pageData) {
            const pageInfo = await this.getCollection(this.tableName)
                .where({
                    appid: appid,
                    path: url,
                })
                .limit(1)
                .get();
            pageData = [];
            if (pageInfo.data.length > 0) {
                pageData = pageInfo.data[0];
                await this.setCache(cacheKey, pageData);
            }
        }
        return pageData;
    }

    /**
     * 获取页面信息不存在则创建
     * @param {String} appid
     * @param {String} url 页面地址
     * @param {Object} title 页面标题
     */
    async getPageAndCreate(appid, url, title) {
        //获取url信息
        const urlInfo = parseUrl(url);
        if (!urlInfo) {
            return false;
        }
        const baseurl = urlInfo.path;
        const pageInfo = await this.getPage(appid, baseurl);
        //页面不存在则创建
        if (pageInfo.length === 0) {
            const thisTime = new DateTime().getTime();
            const insertParam = {
                appid: appid,
                path: baseurl,
                title: title,
                page_params: [],
                create_time: thisTime,
                update_time: thisTime,
            };
            const res = await this.insert(this.tableName, insertParam);

            if (res && res.id) {
                return Object.assign(insertParam, {
                    _id: res.id,
                });
            }
        } else if (!pageInfo.title && title) {
            const cacheKey = 'uni-stat-page-' + appid + '-' + baseurl;
            await this.clearCache(cacheKey);
            await this.update(
                this.tableName,
                {
                    title: title,
                },
                {
                    _id: pageInfo._id,
                }
            );
        }

        return pageInfo;
    }
};
